package org.finesys.common.netty.websocket.service;


/**
 * websocket消息类
 */
public interface WebSocketSendService {
    /**
     * 是否支持
     */
    boolean supports(String subProtocol);

    /**
     * 通知所有用户success事件
     *
     * @param message
     */
    void convertAndSend(Object message);

    /**
     * 发送事件到指定的目的地。
     *
     * @param destination 目标目的地的标识，如队列名、主题名等。
     * @param message     要发送的事件消息内容。
     */

    void convertAndSend(String destination, Object message);

    /**
     * 向指定用户发送success事件通知。
     *
     * @param userName 用户名，用于指定接收事件通知的用户。
     * @param message  要发送的事件消息内容，可以是任何类型的对象。
     */

    void convertAndSendToUser(String userName, Object message);

    /**
     * 向指定用户和目的地发送事件。
     *
     * @param userName    用户名，用于标识接收事件的特定用户。
     * @param destination 目标目的地的标识，可以是队列名、主题名或其他用于区分事件接收者的标识符。
     * @param message     要发送的事件消息内容。
     */

    void convertAndSendToUser(String userName, String destination, Object message);

    /**
     * 从指定目的地移除发送任务。
     * <p>
     * 该方法用于取消或移除已经计划发送到指定目的地的发送任务。
     *
     *
     * @param destination 目标目的地的标识，用于指定哪个目的地的发送任务需要被移除。
     */

    void removeSend(String destination);

    /**
     * 移除指定用户的发送任务。
     * <p>
     * 该方法用于取消或移除与指定用户名相关联的所有发送任务。
     *
     * @param userName 要移除发送任务的用户的用户名。
     */
    void removeSendUser(String userName);

    /**
     * 移除指定用户的指定目的地发送任务。
     * <p>
     * 该方法用于取消或移除与指定用户名相关联的、针对特定目的地的发送任务。
     *
     * @param userName    要移除发送任务的用户的用户名。
     * @param destination 目标目的地的标识，指定要移除的发送任务的目的地。
     */

    void removeSendUser(String userName, String destination);
}
